
; This file defines roadblock behaviour and what roadblock setups can spawn in pursuits.
;
; For the TECHNICAL DETAILS AND LIMITATIONS of the features in here, see the "APPENDIX.txt" file.
; The UNEDITED VALUES in this file mostly resemble the game's vanilla (i.e. unmodified) values.
;
; BEFORE YOU CHANGE OR ADD any roadblock setups, you should first understand how
; Bartender decides which roadblock setup to spawn following a roadblock request:
;  1) • the game picks a spawn location and a car budget,
;  2) • Bartender removes all setups that contain too many cars,
;  3) • Bartender removes all setups that don't match the requested spike-strip setting,
;  4) • Bartender removes all setups whose min. road width is >  the spawn location's width,
;  5) • Bartender removes all setups whose max. road width is <= the spawn location's width,
;  6) • Bartender chooses a random setup from those remaining through a "chance"-weighted roll,
;  7) • Bartender returns either the standard or mirrored version of the chosen setup, and
;  8) • the game re-scales (i.e. stretches) the returned setup by up to 14% if there's room.
;
; TO ADD a new roadblock setup to the game:
;  1) • design your setup with Bartender's "RoadblockEditor.html" file in any browser,
;  2) • copy the contents of the "Bartender settings" field below the roadblock preview,
;  3) • think of a unique name (e.g. "Custom01") for your new roadblock setup,
;  4) • create a new parameter group called "[Setups:Custom01]" in this .ini file,
;  5) • paste the roadblock settings from the editor under this new parameter group,
;  6) • (optional) adjust the upper "extent" width value to control possible spawn locations,
;  7) • (optional) define a "stretch" flag value to toggle coverage-based width stretching,
;  8) • (optional) define a "mirror" probability value to control mirrored setup spawns, and
;  9) • (optional) define "heatXY" / "raceXY" spawn-chance values to fine-tune the spawn rate.
;
; The OPTIONAL "CHANCE" VALUES for roadblock setups are weights, not percentages; they work
; just like the "chance" values the game uses for cop spawns: The actual spawn chance of a 
; roadblock setup is its "chance" value divided by the sum of the "chance" values of all
; roadblocks that (also) fulfil the requirements for the game's current roadblock request.
; A "chance" value of 0 means the roadblock setup never appears at a given Heat level.
;
; Common ROAD WIDTHS (in metres) for spawn points are:
;  •  6-10 (very narrow roads),
;  • 11-12 (narrow city roads),
;  • 13-16 (city roads with narrow sidewalks),
;  • 19-20 (city roads with wide sidewalks),
;  • 24-32 (highways without a median), and
;  • 32-50 (highways with a median).
;
; Common CAR BUDGETS outside of highways are 4-5 cars.






; ── ■ │ ROADBLOCK BEHAVIOUR │ ■ ──────────────────────────────────────────────────────────────────

[Roadblocks:Radio]
; How likely (in percent) the cops are to call out roadblocks / spikes over the radio.
;
; ■ FORMAT: heatXY = {spawn, spike}CalloutProbability (FREE-ROAM; -> "default" if omitted)
;           raceXY = {spawn, spike}CalloutProbability (RACES;     -> "heatXY"  if omitted)
;
; • "spawnCalloutProbability" is the likelihood of roadblock-spawn callouts in general.
; • "spikeCalloutProbability" is the likelihood of spike-placement callouts specifically.
; • Spike-placement callouts also require the "spawnCalloutProbability" check to succeed.
; • Due to some scheduling quirks, callouts may play less frequently than expected.
; • Each value must be a decimal or whole number between 0 and 100 (inclusive).
; • You can define a "default" value pair.

default = 100.0, 100.0

heat01 = 100.0, 100.0
heat02 = 100.0, 100.0
heat03 = 100.0, 100.0
heat04 = 100.0, 100.0
heat05 = 100.0, 100.0
heat06 = 100.0, 100.0
heat07 = 100.0, 100.0
heat08 = 100.0, 100.0
heat09 = 100.0, 100.0
heat10 = 100.0, 100.0

race01 = 100.0, 100.0
race02 = 100.0, 100.0
race03 = 100.0, 100.0
race04 = 100.0, 100.0
race05 = 100.0, 100.0
race06 = 100.0, 100.0
race07 = 100.0, 100.0
race08 = 100.0, 100.0
race09 = 100.0, 100.0
race10 = 100.0, 100.0




[Joining:Limit]
; How many vehicles that joined from roadblocks can be active in a pursuit in total.
;
; ■ FORMAT: heatXY = totalJoinLimit (FREE-ROAM)
;           raceXY = totalJoinLimit (RACES)
;
; • To enable joining from roadblocks, see the "Supports.ini" file of the "Basic" feature set.
; • Joining from roadblocks is limited only at Heat levels for which you define valid limit values.
; • This limit for joining from roadblocks still applies with independent "Chasers" spawns enabled.
; • Each value must be a non-negative whole number.
; • You can't define a "default" value.

; Uncomment any of these sample values to enable them
heat01 = 4
heat02 = 6
heat03 = 8
heat04 = 10
heat05 = 15
heat06 = 15
heat07 = 15
heat08 = 20
heat09 = 20
heat10 = 25

; Uncomment any of these sample values to enable them
race01 = 4
race02 = 6
race03 = 8
race04 = 10
race05 = 15
race06 = 15
race07 = 15
race08 = 20
race09 = 20
race10 = 25




[Joining:Fleeing]
; Delay interval (in seconds) and "Chasers" threshold for joined roadblock vehicles to flee.
;
; ■ FORMAT: heatXY = {min, max}FleeDelay, chasersThreshold (FREE-ROAM)
;           raceXY = {min, max}FleeDelay, chasersThreshold (RACES)
;
; • To enable joining from roadblocks, see the "Supports.ini" file of the "Basic" feature set.
; • Joined vehicles flee only at Heat levels for which you define valid delay and threshold values.
; • Joined vehicles flee only while the number of active "Chasers" is above the threshold.
; • Flee delays are random numbers between "minFleeDelay" and "maxFleeDelay".
; • Each delay value must be a non-negative decimal or whole number.
; • Each threshold value must be a non-negative whole number.
; • You can't define a "default" value tuple.

; Uncomment any of these sample values to enable them
heat01 = 3600.0, 3600.0, 0
heat02 = 3600.0, 3600.0, 0
heat03 = 3600.0, 3600.0, 0
heat04 = 3600.0, 3600.0, 0
heat05 = 3600.0, 3600.0, 0
heat06 = 3600.0, 3600.0, 0
heat07 = 3600.0, 3600.0, 0
heat08 = 3600.0, 3600.0, 0
heat09 = 3600.0, 3600.0, 0
heat10 = 3600.0, 3600.0, 0

; Uncomment any of these sample values to enable them
race01 = 3600.0, 3600.0, 0
race02 = 3600.0, 3600.0, 0
race03 = 3600.0, 3600.0, 0
race04 = 3600.0, 3600.0, 0
race05 = 3600.0, 3600.0, 0
race06 = 3600.0, 3600.0, 0
race07 = 3600.0, 3600.0, 0
race08 = 3600.0, 3600.0, 0
race09 = 3600.0, 3600.0, 0
race10 = 3600.0, 3600.0, 0






; ── ■ │ CUSTOM SETUPS │ ■ ────────────────────────────────────────────────────────────────────────

[Setups:Example]
; READ THE COMMENTS AT THE TOP OF THIS FILE BEFORE YOU CHANGE / ADD ANYTHING!
;
; Settings (all widths and offsets in metres) for the custom "Example" roadblock setup.
;
; ■ FORMAT: extent = {min, max}RoadWidth
;
;           partXY = typeID, {horizontal, vertical}Offset, orientation
;
;           stretch = isEnabled
;           mirror  = probability
;
;           heatXY = chance (FREE-ROAM; -> "default" if omitted)
;           raceXY = chance (RACES;     -> "heatXY"  if omitted)
;   
; • Bartender ignores roadblock setups without exactly two extent values.
; • Bartender ignores roadblock setups where "minRoadWidth" >= "maxRoadWidth".
; • Bartender ignores roadblock setups which don't contain at least one car.
; • Bartender only tries to parse part01 through 06 of each roadblock setup.
; • The greater the width range, the higher the chance of more empty space.
; • The smaller the width range, the fewer eligible spawn locations for the setup.
; • If you don't define a setting flag for width stretching, Bartender uses "true".
; • If you don't define a mirror probability (in percent), Bartender uses 50.
; • If you don't define a "default" spawn-chance value, Bartender uses 100.
; • Each type ID must be either 0 (none), 1 (car), 2 (sawhorse), or 3 (spikes).
; • Each width, offset, and orientation must be a decimal or whole number.
; • The setting flag for width stretching must be either "true" or "false".
; • The mirror probability must be a decimal or whole number between 0 and 100 (inclusive).
; • Each spawn-chance value must be a non-negative whole number.
; • You can define a "default" spawn-chance value.

; Uncomment the extent and part values to enable this setup
extent = 8.00, 8.50

part01 = 1, -3.00,  0.00, 0.750
part02 = 1,  2.00, -0.35, 0.270
part03 = 2, -5.00,  0.00, 0.500
part04 = 2, -5.00,  0.00, 0.500
; part05 = 3, -6.36,  0.86, 0.944
; part06 = 2,  3.14, -3.64, 0.444

; Uncomment these values to customise spawn behaviour
stretch = true
mirror  = 50.0

; Uncomment these values to adjust (relative) spawn chances
; default = 100

; heat01 = 100
; heat02 = 100
; heat03 = 100
; heat04 = 100
; heat05 = 100
; heat06 = 100
; heat07 = 100
; heat08 = 100
; heat09 = 100
; heat10 = 100

; race01 = 100
; race02 = 100
; race03 = 100
; race04 = 100
; race05 = 100
; race06 = 100
; race07 = 100
; race08 = 100
; race09 = 100
; race10 = 100






; ── ■ │ VANILLA SETUPS (REGULAR) │ ■ ─────────────────────────────────────────────────────────────

[Setups:Regular01]
extent = 8.00, 8.50

part01 = 1, -3.00,  0.00, 0.750
part02 = 1,  2.00, -0.35, 0.270
part03 = 2, -5.00,  0.00, 0.500
part04 = 2,  5.00,  0.00, 0.500

stretch = true
mirror  = 50.0




[Setups:Regular02]
extent = 12.00, 12.10

part01 = 1, -5.20, -2.00, 0.875
part02 = 1,  0.00, -2.00, 0.120
part03 = 1,  4.50, -1.00, 0.870
part04 = 2, -2.90,  0.20, 0.480

stretch = true
mirror  = 50.0




[Setups:Regular03]
extent = 5.50, 6.50

part01 = 1, -2.00, 0.00, 0.260
part02 = 1,  2.00, 5.00, 0.480
part03 = 2,  1.50, 1.70, 0.610

stretch = true
mirror  = 50.0




[Setups:Regular04]
extent = 6.50, 8.50

part01 = 1, -2.00, 0.00, 0.750
part02 = 1,  3.00, 4.00, 0.250
part03 = 2,  1.50, 1.70, 0.610

stretch = true
mirror  = 50.0




[Setups:Regular05]
extent =  8.50, 10.00

part01 = 1, -0.90,  0.00, 0.720
part02 = 1,  4.00,  0.00, 0.320
part03 = 2, -4.80, -0.80, 0.540

stretch = true
mirror  = 50.0




[Setups:Regular06]
extent = 15.00, 22.00

part01 = 1, -5.00,  0.00, 0.710
part02 = 1,  1.00,  0.00, 0.290
part03 = 1,  5.00,  6.00, 0.240
part04 = 1,  8.00,  2.00, 0.500
part05 = 2,  10.0, -1.40, 0.570
part06 = 2, -10.0, -1.40, 0.430

stretch = true
mirror  = 50.0




[Setups:Regular07]
extent = 13.00, 14.00

part01 = 1, -4.00,  1.00, 0.260
part02 = 1, -0.90, -4.20, 0.750
part03 = 1,  5.00, -4.00, 0.260
part04 = 2, -3.30, -2.20, 0.400
part05 = 2, -5.00, -4.00, 0.460

stretch = true
mirror  = 50.0




[Setups:Regular08]
extent = 11.40, 12.00

part01 = 1, -4.40, -1.20, 0.650
part02 = 1,  0.00,  2.40, 0.240
part03 = 1,  4.40, -1.20, 0.350
part04 = 2,  0.00, -2.70, 0.490
part05 = 2,  2.10,  0.00, 0.350
part06 = 2, -2.10,  0.00, 0.650

stretch = true
mirror  = 50.0




[Setups:Regular09]
extent = 12.10, 13.00

part01 = 1, -4.50,  0.00, 0.750
part02 = 1,  1.00,  0.00, 0.250
part03 = 1,  4.00,  4.50, 0.720
part04 = 2,  4.30, -1.20, 0.480
part05 = 2,  4.90,  0.30, 0.040

stretch = true
mirror  = 50.0




[Setups:Regular10]
extent = 10.00, 11.40

part01 = 1, -4.50,  0.00, 0.270
part02 = 1, -0.30, -4.00, 0.750
part03 = 1,  4.20, -4.00, 0.240
part04 = 1,  4.00,  0.00, 0.260
part05 = 2, -4.90, -5.00, 0.510
part06 = 2, -4.20, -3.30, 0.530

stretch = true
mirror  = 50.0




[Setups:Regular11]
extent = 14.00, 15.00

part01 = 1, -4.50,  0.00, 0.250
part02 = 1,  1.00,  0.00, 0.750
part03 = 1,  0.00,  5.40, 0.250
part04 = 1,  5.30,  5.40, 0.220
part05 = 2, -2.00,  2.20, 0.370
part06 = 2,  5.40, -0.20, 0.530

stretch = true
mirror  = 50.0




[Setups:Regular12]
; Unused by the vanilla game
extent = 12.00, 12.10

part01 = 1, -4.30,  0.00, 0.740
part02 = 1, -5.00,  4.00, 0.750
part03 = 1,  0.20,  4.00, 0.270
part04 = 1,  4.00,  0.00, 0.250
part05 = 2, -0.70, -1.00, 0.355
part06 = 2,  0.70, -1.00, 0.635

stretch = true
mirror  = 50.0




[Setups:Regular13]
extent = 22.00, 28.00

part01 = 1, -9.00,  0.00, 0.740
part02 = 1, -3.00,  0.00, 0.250
part03 = 1,  3.00,  0.00, 0.750
part04 = 1,  9.00,  0.00, 0.250
part05 = 2,  0.00, -3.00, 0.500

stretch = true
mirror  = 50.0




[Setups:Regular14]
; Unused by the vanilla game
extent = 15.00, 22.00

part01 = 1, -5.90,  0.00, 0.740
part02 = 1,  0.00,  0.00, 0.250
part03 = 1,  5.90,  0.00, 0.750
part04 = 2,  3.00, -2.00, 0.510

stretch = true
mirror  = 50.0




[Setups:Regular15]
extent = 28.00, 50.00

part01 = 1, -12.00,  0.00, 0.740
part02 = 1,  -6.00,  3.00, 0.250
part03 = 1,   0.00,  0.00, 0.750
part04 = 1,   6.00,  3.00, 0.750
part05 = 1,  12.00,  0.00, 0.250
part06 = 2,   0.00, -5.00, 0.500

stretch = true
mirror  = 50.0






; ── ■ │ VANILLA SETUPS (SPIKES) │ ■ ──────────────────────────────────────────────────────────────

[Setups:Spikes01]
extent =  8.00, 12.00

part01 = 3, -3.00,  0.00, 0.500
part02 = 3,  2.00, -0.35, 0.520
part03 = 1,  0.00,  5.00, 0.750

stretch = true
mirror  = 50.0




[Setups:Spikes02]
extent = 15.00, 21.00

part01 = 3, -5.00,  0.00, 0.510
part02 = 1,  1.00,  0.00, 0.290
part03 = 1,  5.00,  6.00, 0.240
part04 = 1,  8.00,  2.00, 0.500
part05 = 2,  4.10, -1.40, 0.570
part06 = 2,  6.10, -1.40, 0.430

stretch = true
mirror  = 50.0




[Setups:Spikes03]
; Unused by the vanilla game
extent = 15.00, 18.00

part01 = 1, -4.00,  1.00, 0.260
part02 = 1, -0.90, -4.20, 0.750
part03 = 3,  5.00, -4.00, 0.520
part04 = 2, -3.30, -2.20, 0.400
part05 = 2, -5.00, -4.00, 0.460

stretch = true
mirror  = 50.0




[Setups:Spikes04]
extent = 14.10, 15.00

part01 = 3, -2.00,  0.00, 0.500
part02 = 3,  2.00,  0.00, 0.500
part03 = 1,  5.00,  4.50, 0.720
part04 = 1, -5.00, -1.20, 0.480
part05 = 2,  7.00,  0.30, 0.040
part06 = 2, -7.00,  0.30, 0.040

stretch = true
mirror  = 50.0




[Setups:Spikes05]
extent = 12.00, 13.00

part01 = 1, -4.00,  0.00, 0.270
part02 = 3, -0.30, -4.40, 0.500
part03 = 1,  4.80, -4.00, 0.240
part04 = 1,  4.00,  0.00, 0.260
part05 = 2, -4.90, -5.00, 0.510
part06 = 2, -4.20, -3.30, 0.530

stretch = true
mirror  = 50.0




[Setups:Spikes06]
extent = 13.00, 14.10

part01 = 3, -4.00,  0.00, 0.510
part02 = 1, -5.00,  4.00, 0.750
part03 = 1,  0.20,  4.00, 0.270
part04 = 1,  4.00,  0.00, 0.250
part05 = 2, -0.70, -1.00, 0.355
part06 = 2,  0.70, -1.00, 0.635

stretch = true
mirror  = 50.0




[Setups:Spikes07]
extent = 21.00, 28.00

part01 = 3, -9.00,  0.00, 0.480
part02 = 1, -3.00,  2.00, 0.250
part03 = 1,  3.00,  2.00, 0.750
part04 = 3,  9.00,  0.00, 0.520
part05 = 1,  0.00,  5.00, 0.500
part06 = 2,  0.00, -3.00, 0.500

stretch = true
mirror  = 50.0




[Setups:Spikes08]
Unused by the vanilla game
extent = 15.00, 21.00

part01 = 3, -5.20,  0.00, 0.510
part02 = 1,  0.00,  0.00, 0.250
part03 = 1,  5.90,  0.00, 0.750
part04 = 2,  3.00, -2.00, 0.510

stretch = true
mirror  = 50.0




[Setups:Spikes09]
extent = 28.00, 50.00

part01 = 1, -12.00, 0.00, 0.740
part02 = 3,  -6.00, 0.00, 0.500
part03 = 3,   0.00, 0.00, 0.510
part04 = 3,   6.00, 0.00, 0.500
part05 = 1,  12.00, 0.00, 0.250
part06 = 2,   0.00, -5.00, 0.500

stretch = true
mirror  = 50.0